home *** CD-ROM | disk | FTP | other *** search
- #! /usr/bin/env python
-
- # Here's an example of how you can use the Python rfc822 and
- # mailbox modules to make extracting data from mail _easy_.
-
- # How likely are you to get an immediate answer back from that email
- # you send now? Find out by checking how active your recipient has
- # been over the history of your correspondence.
-
- # First argument: recipient's email address.
- # Remaining arguments: mailbox files you want to check.
-
- import sys, time
- import mailbox, rfc822
-
- HOUR = 60 * 60.0
- WEEK = HOUR * 24 * 7.0
-
- total = 0
- hit = 0
-
- victim = sys.argv[1]
-
- # "now" is in seconds since the beginning of the week; displace into
- # negative if necessary to make comparisons work.
- now = time.time() % WEEK
- if now + HOUR > WEEK:
- now = now - WEEK
-
- for filename in sys.argv[2:]:
- try:
- box = mailbox.UnixMailbox(open(filename))
- except IOError:
- print "Error opening %s." % filename
- sys.exit()
-
- while (1):
- # keep reading messages from the mailbox as long as
- # any remain.
- message = box.next()
- if not message:
- break
-
- # Here's the fun part. "message" is now an rfc822 object
- # that you can just ask for its sender, date and so on.
-
- # skip this mail if it's not from the person we're interested
- # in.
- email = message.getaddrlist('From')[0][1]
- if email != victim:
- continue
-
- tt = time.mktime(message.getdate('Date')) % WEEK
- total = total + 1
-
- if (now < tt) and (now + HOUR > tt):
- hit = hit +1
-
- # How many messages you can expect to receive from this person in
- # the next hour if they were evenly distributed around the week:
- baseline = (HOUR * total) / WEEK
-
- # How active, relative to baseline, this person really is at this
- # hour of the week:
- activity = hit / baseline
-
- print "%d total messages from %s, %d in this hour of the week." % \
- (total, victim, hit)
-
- print "Predicted activity level in the next hour: %f" % (activity)
-
- # For bonus points, calculate a 95% confidence interval and integrate
- # into your contact manager or mail client.
-